from django.shortcuts import render

from django.http import HttpResponse

from app01 import models

def updatebookbyid(request,id):
    books = models.Book.objects.filter(pk=id).update(price=666)
    print("update:",books)
    return HttpResponse("<p>执行修改！</p>")


def delbookbyid(request,id):
    books = models.Book.objects.filter(pk=id).delete()
    print("delete:",books)
    return HttpResponse("<p>执行删除！</p>")

def find_bookbyid(request,id):
    books = models.Book.objects.filter(pk=id)
    print(books)
    print("//////////////////////////////////////")
    books = models.Book.objects.filter(publish='老杨出版社', price=300)
    print(books, type(books))  # QuerySet类型，类似于list。
    return HttpResponse("<p>查找成功！</p>")
# 关于查询问题：
#
# books = models.Book.objects.get(pk=5)
# books = models.Book.objects.get(pk=18)  # 报错，没有符合条件的对象
# books = models.Book.objects.get(price=200)  # 报错，符合条件的对象超过一个
#
#     books = models.Book.objects.last() # 返回所有数据的最后一条数据
#     books = models.Book.objects.first() # 返回所有数据的第一条数据
# 排序：
#
#     books = models.Book.objects.order_by("price") # 查询所有，按照价格升序排列
#     books = models.Book.objects.order_by("-price") # 查询所有，按照价格降序排列
#  统计
#     books = models.Book.objects.count() # 查询所有数据的数量
#     books = models.Book.objects.filter(price=200).count() # 查询符合条件数据的数量
# 存在
#     books = models.Book.objects.exists()
#     # 报错，判断的数据类型只能为QuerySet类型数据，不能为整型
#     books = models.Book.objects.count().exists()
#     # 报错，判断的数据类型只能为QuerySet类型数据，不能为模型类对象
#     books = models.Book.objects.first().exists()

    # values()
    # 方法用于查询部分字段的数据。
    #
    # 返回的是  QuerySet 类型数据，类似于 list，里面不是模型类的对象，而是一个可迭代的字典序列，字典里的键是字段，值是数据。
    # # 查询所有的id字段和price字段的数据
    # books = models.Book.objects.values("pk","price")
    # print(books[0]["price"],type(books)) # 得到的是第一条记录的price字段的数据

# values_list() 方法用于查询部分字段的数据。
# 返回的是 QuerySet 类型数据，类似于 list，里面不是模型类的对象，而是一个个元组，元组里放的是查询字段对应的数据。
# 查询所有的price字段和publish字段的数据
#     books = models.Book.objects.values_list("price","publish")
#     print(books)
#     print(books[0][0],type(books)) # 得到的是第一条记录的price字段的数据
# distinct() 方法用于对数据进行去重。
#       books = models.Book.objects.values_list("publish").distinct() # 对模型类的对象去重没有意义，因为每个对象都是一个不一样的存在。
#       books = models.Book.objects.distinct()

# filter() 方法基于双下划线的模糊查询（exclude 同理）。
# __in 用于读取区间，= 号后面为列表
# # 查询价格为200或者300的数据
# books = models.Book.objects.filter(price__in=[200, 300])
# __gt 大于号 ，__gte 大于等于，__lt 小于，__lte 小于等于，= 号后面为数字。
# __contains 包含，__icontains 不区分大小写的包含，= 号后面为字符串。
# __startswith 以指定字符开头，__endswith 以指定字符结尾，= 号后面为字符串
# __year 是 DateField 数据类型的年份，__month 是DateField 数据类型的月份，__day 是DateField 数据类型的天数= 号后面为数字。


def find_book(request):
    books = models.Book.objects.all()
    print(books, type(books))  # QuerySet类型，类似于list，访问 url 时数据显示在命令行窗口中。

    return HttpResponse("<p>查找成功！</p>")

def add_book(request):
    # orm操作
    # book = models.Book(title="java教程",price=300,publish="老杨出版社",pub_date="2021-8-18")
    # book.save()

    #通过 ORM 提供的 objects 提供的方法 create 来实现
    books = models.Book.objects.create(title="如来神掌",price=200,publish="功夫出版社",pub_date="2010-10-10")
    print(books, type(books)) # Book object (18)
    #以上两种添加方式，好像推荐的是第二种
    return HttpResponse("<p>数据添加成功！</p>")

# Create your views here.
def index(request,m):
    print(m,"月")
    return HttpResponse("app01收到消息")
